package co.com.bean.eps;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.ejb.Stateless;

import co.com.smart.maestro.infraestructure.dto.EpsDTO;
import co.com.smart.maestro.infraestructure.dto.ResponseJson;
import co.com.smart.mapper.Mapper;
import co.com.smart.persistence.entity.EpsFacadeLocal;
import co.com.smart.persistence.entity.dto.SmartEps;
import co.com.smart.session.DelegateContextEJB;
import co.com.smart.utilidades.Constantes;

/**
 * Session Bean implementation class EpsBean
 */
@Stateless(mappedName = "ejb/EpsBean")
public class EpsBean implements EpsBeanLocal{
			private EpsFacadeLocal facade;
			/**
			 * Default constructor. 
			 */
			public EpsBean() {
				facade = DelegateContextEJB.getEpsFacadeLocal();
			}
			@Override
			public ResponseJson insertarEps(EpsDTO epsDTO){
				ResponseJson response = new ResponseJson(); 
				try {
					facade.create(Mapper.mapperDtoToSmartEps(epsDTO));
					response.setCodigo(Constantes.StatusResponse.OK.getStatus());
					response.setMensaje(Constantes.MensajeResponse.MSJ_OK.getMensajeStatuss()+ "Departamento almacenado.");
					response.setMensajeInterno(Constantes.MensajeResponse.MSJ_OK.getMensajeStatuss()+ "Departamento almacenado.");
				} catch (Throwable e) {
					System.err.println("Error insertando el departamento -> " + e.getMessage());
					response.setCodigo(Constantes.StatusResponse.ERROR.getStatus());
					response.setMensaje(Constantes.MensajeResponse.MSJ_ERROR.getMensajeStatuss()+ "No fue posible almacenar el departamento.");
					response.setMensajeInterno(Constantes.MensajeResponse.MSJ_ERROR.getMensajeStatuss()+e.getMessage());
				}
				return response ;
			}
			@Override
			public ResponseJson editEps(EpsDTO epsDTO) {
				ResponseJson response = new ResponseJson(); 
				try {
					epsDTO.setFhmodificacion(new Date());
					facade.edit(Mapper.mapperDtoToSmartEps(epsDTO));
					response.setCodigo(Constantes.StatusResponse.OK.getStatus());
					response.setMensaje(Constantes.MensajeResponse.MSJ_OK.getMensajeStatuss()+ "Departamento editado.");
					response.setMensajeInterno(Constantes.MensajeResponse.MSJ_OK.getMensajeStatuss()+ "Departamento editado.");
				} catch (Throwable e) {
					System.err.println("Error editando el departamento -> " + e.getMessage());
					response.setCodigo(Constantes.StatusResponse.ERROR.getStatus());
					response.setMensaje(Constantes.MensajeResponse.MSJ_ERROR.getMensajeStatuss()+ "No fue posible editar el departamento.");
					response.setMensajeInterno(Constantes.MensajeResponse.MSJ_ERROR.getMensajeStatuss()+e.getMessage());
				}

				return response ;
			}
			@Override
			public ResponseJson removeEps(EpsDTO epsDTO, boolean logic) {
				ResponseJson response = new ResponseJson(); 
				if(logic){
					try {
						epsDTO.setFhretiro(new Date());
						epsDTO.setFhmodificacion(new Date());
						facade.edit(Mapper.mapperDtoToSmartEps(epsDTO));
						response.setCodigo(Constantes.StatusResponse.OK.getStatus());
						response.setMensaje(Constantes.MensajeResponse.MSJ_OK.getMensajeStatuss()+ "Eps inactivado");
						response.setMensajeInterno(Constantes.MensajeResponse.MSJ_OK.getMensajeStatuss()+ "Eps inactivado.");
					} catch (Throwable e) {
						System.err.println("Error editando el Eps -> " + e.getMessage());
						response.setCodigo(Constantes.StatusResponse.ERROR.getStatus());
						response.setMensaje(Constantes.MensajeResponse.MSJ_ERROR.getMensajeStatuss()+ "No fue posible inactivar el Eps.");
						response.setMensajeInterno(Constantes.MensajeResponse.MSJ_ERROR.getMensajeStatuss()+e.getMessage());
					}
				}else{
					try {
						facade.remove(Mapper.mapperDtoToSmartEps(epsDTO));
						response.setCodigo(Constantes.StatusResponse.OK.getStatus());
						response.setMensaje(Constantes.MensajeResponse.MSJ_OK.getMensajeStatuss()+ "Eps eliminado");
						response.setMensajeInterno(Constantes.MensajeResponse.MSJ_OK.getMensajeStatuss()+ "Eps eliminado.");
					} catch (Throwable e) {
						System.err.println("Error eliminando el Eps -> " + e.getMessage());
						response.setCodigo(Constantes.StatusResponse.ERROR.getStatus());
						response.setMensaje(Constantes.MensajeResponse.MSJ_ERROR.getMensajeStatuss()+ "No fue posible eliminar el Eps.");
						response.setMensajeInterno(Constantes.MensajeResponse.MSJ_ERROR.getMensajeStatuss()+e.getMessage());
					}
				}
				return response ;
			}
			@Override
			public List<EpsDTO> consultarAllEps() {
				List<EpsDTO> dp = new ArrayList<EpsDTO>();
				for (SmartEps entity : facade.findAll()) {
					if(entity.getSmFhretiro() == null){
						dp.add(Mapper.mapperSmartEps_EpsDTO(entity));
					}
				}
				return dp;
			}
			@Override
			public EpsDTO consultarEpsId(EpsDTO epsDTO) {
				EpsDTO dp = new EpsDTO();
				SmartEps entity  = facade.find(epsDTO.getSceps());
				if(entity != null && entity.getSmFhretiro() == null){
					dp = Mapper.mapperSmartEps_EpsDTO(entity);
				}
				return dp;
			}
	
}
